package InterClass03;

public class Car {//外部类
    public String carName;
    static int b = 10;

    public void show() {
        //	System.out.println(engineName);//外部类不能直接访问内部类的属性和方法
        //  创建内部类对象才能访问内部类的属性和方法
        Engine e = new Engine("V8发动机");
        e.show();
        e.show2();

    }

    //成员内部类
    private class Engine {//内部类
        public String engineName;
        int b = 20;

        public Engine() {
        }

        public Engine(String engineName) {
            this.engineName = engineName;
        }

        //内部类可以直接访问外部类的属性和方法，包括私有属性和方法
        public void show() {
            System.out.println(carName);
            System.out.println(engineName);
        }

        //如果内部类和外部类的属性重名，访问操作
        public void show2() {
            int b = 30;
            System.out.println(b);// 30 局部变量
            System.out.println(this.b);// 20 内部类的属性
            System.out.println(Car.this.b);// 10 外部类的属性
            System.out.println();
        }

    }

    //静态内部类
    static class StaticEngine {
        public void show() {
            System.out.println("静态内部类的非静态方法");
            System.out.println("输出外部类的静态属性b：" + b + "\n");
        }

        public static void show2() {
            System.out.println("静态内部类的静态方法");

        }
    }

}
